package com.lennon.oauth.store;

import com.lennon.oauth.store.impl.ClientStore;
import com.lennon.oauth.store.impl.CodeStore;
import com.lennon.oauth.store.impl.TokenStore;

public class StoreFactory {

	private static volatile ITokenStore tokenStore;
	private static volatile ICodeStore codeStore;
	private static volatile IClientStore clientStore;
	
	public static ITokenStore getTokenStore() {
		if(tokenStore == null) {
			synchronized (StoreFactory.class) {
				tokenStore = new TokenStore();
			}
		}
		return tokenStore;
	}
	
	public static ICodeStore getCodeStore() {
		if(codeStore == null) {
			synchronized (StoreFactory.class) {
				codeStore = new CodeStore();
			}
		}
		return codeStore;
	}
	
	public static IClientStore getClientStore() {
		if(clientStore == null) {
			synchronized (StoreFactory.class) {
				clientStore = new ClientStore();
			}
		}
		return clientStore;
	}
}
